package entity;

import boundary.Adapter;

public abstract class Ownable extends Field {

	protected int price;
	protected Spiller owner;

	public Ownable(String title, String subtitle, String desc, int price, int cnsq){
		super(title,subtitle,desc,cnsq);
		this.price=price;
	}
	
	protected abstract int getRent();
	
	public int getPrice(){
		return price;
	}

	/**
	 * Returnerer ejeren af feltet.
	 */
	public Spiller getOwner(){
		return this.owner;
	}

	/**
	 * Sætter en spiller som ejer af feltet
	 * @param spiller Spilleren som skal eje feltet
	 * @param fieldNumber Feltets placering på GUIen (typisk identisk med spillerens position +1).
	 */
	public void setOwner(Spiller spiller, int fieldNumber){
		Adapter.setSubText(fieldNumber, subtitle + price);
		this.owner = spiller;
	}
	
	public void landOnField(Spiller spiller){
		// Beder adapteren vise feltbeskrivelsen
		Adapter.showFieldDesc(spiller);
		// Hvis feltet ejes af en spiller betales afgift/konsekvens
		if (owner != null && owner != spiller){
			owner.getKonto().updBalance(getRent());
			spiller.getKonto().updBalance(-getRent());
		}
		// Hvis der ikke er en ejer har spilleren mulighed for at købe feltet hvis han har råd til det
		else if (owner == null){
			if (spiller.getKonto().getBalance() >= price){
				boolean choice = Adapter.buyField();
				if (choice == true){
					owner = spiller;
					spiller.getKonto().updBalance(-price);
					Adapter.setOwner(owner.getPosition(), owner.getName());
					Adapter.setSubText(owner.getPosition(), Integer.toString(getRent()));
				}
				else if (choice == false){// Der sker intet hvis spilleren ikke ønsker at købe det
				}
			}
			else  {
				Adapter.cannotAfford();
			}
		}
		else if (owner == spiller){
			Adapter.yourField();
		}
	}
}
